// 游戏主逻辑文件
$(function () {
  newgame()
})
var board = new Array()
var added = new Array()
var score = 0
// 初始化棋盘
function newgame() {
  // 初始化棋盘格
  init()
  // 生成两个随机数字
  generatOneNumber()
  generatOneNumber()
}

// 初始化棋盘格
function init() {
  score = 0
  flag = false
  document.getElementById('score').innerHTML = score
  document.getElementById('kaigua').innerText = `开挂模式(${flag})`
  // 每行
  for (let i = 0; i < 4; i++) {
    board[i] = new Array()
    added[i] = new Array()
    // 每列
    for (let j = 0; j < 4; j++) {
      // 初始化每个格子的值
      board[i][j] = 0
      added[i][j] = 0
      // 获取每个格子元素
      var gridCell = $(`#grid-cell-${i}-${j}`)
      // 通过getPosTop()方法设置每个格子距顶端的距离
      gridCell.css('top', getPosTop(i, j) + 'rem')
      // 通过getPosLest()方法设置每个格子距左边的距离
      gridCell.css('left', getPosLeft(i, j) + 'rem')
    }
  }
  // 数字格
  updateBoardView()
}

// 初始化数字格
function updateBoardView() {
  // 清空数字格布局内容
  $('.number-cell').remove()
  for (let i = 0; i < 4; i++) {
    for (let j = 0; j < 4; j++) {
      $('.grid-container').append(`<div class="number-cell" id="number-cell-${i}-${j}"></div>`)
      var numberCell = $(`#number-cell-${i}-${j}`)
      // 如果棋盘格的值为0，设置数字格宽高都为0
      if (board[i][j] === 0) {
        numberCell.css('width', '0rem')
        numberCell.css('height', '0rem')
        numberCell.css('top', `${getPosTop(i, j) + 2}rem`)
        numberCell.css('left', `${getPosLeft(i, j) + 2}rem`)
      } else {
        // 如果棋盘格的值不为0，设置数值格样式
        numberCell.css('width', '2rem')
        numberCell.css('height', '2rem')
        numberCell.css('top', getPosTop(i, j) + 'rem')
        numberCell.css('left', getPosLeft(i, j) + 'rem')
        numberCell.css('background-color', getNumberBackgroundColor(board[i][j]))
        numberCell.css('color', getNumberColor(board[i][j]))
        numberCell.text(board[i][j])
      }
    }
  }
}

function generatOneNumber() {
  // 生成一个随机位置的随机数字
  // 1.生成随机位置
  var randX = parseInt(Math.floor(Math.random() * 4))
  var randY = parseInt(Math.floor(Math.random() * 4))
  // 随机生成空格子
  while (true) {
    // 当格子为0时
    if (board[randX][randY] === 0) break
    // 否则从新随机一个位置
    var randX = parseInt(Math.floor(Math.random() * 4))
    var randY = parseInt(Math.floor(Math.random() * 4))
  }
  // 2.生成随机数字(2048游戏规则，新生成的数字只能时2或4)
  // var randNumber = Math.random() < 0.7 ? 2 : 4
  var randNumber = ruoZhe()
  // 3.在随机位置上显示随机数字
  board[randX][randY] = randNumber
  // 实现随机数字显示的动画
  ShowNumberWithAnimation(randX, randY, randNumber)
}

// 开挂模式
var flag = false
function ruoZhe() {
  if (!flag) return Math.random() < 0.7 ? 2 : 4
  else return 512
}
function kaiGua() {
  flag = !flag
  document.getElementById('kaigua').innerText = `开挂模式(${flag})`
}
